package ai.zixing.mashibing.new_class.class08;

public class Code03_PartitionAndQuickSort {

    public static void splitNum1(int[] arr) {
        int lessEqualR = -1;
        int index = 0;
        // 取最后一个数比较，小于等于的放左边，大于的放右边
        int mostR = arr.length - 1;
        while (index < arr.length) {
            if (arr[index] <= arr[mostR]) {
//                swap(arr, lessEqualR + 1, index);
//                lessEqualR++;
//                index++;
                // 等同于上面三句
                swap(arr, ++lessEqualR, index++);
            } else {
                index++;
            }
        }
    }


    public static void splitNum2(int[] arr) {
        int N = arr.length;
        // 小于区的有边界
        int lessR = -1;
        // 大于区的左边界
        int moreL = N - 1;
        // 当前数指针
        int index = 0;
        while (index < moreL) {
            if (arr[index] < arr[N - 1]) {
                swap(arr, ++lessR, index++);
            } else if (arr[index] > arr[N - 1]) {
                swap(arr, --moreL, index);
            } else {
                index++;
            }
            swap(arr, moreL, N - 1);
        }
    }


    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}
